/********************************************************************************
 * Project Name		[JavaSE_Fundamentals]
 * File Name     	[TestFile.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package io.api;

import java.io.File;
import java.io.IOException;

/**
 * java.io.File测试
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class TestFile {

	/**
	 * 获得文件信息的API
	 * 
	 * @param fileName
	 */
	public static void getFileInfo(String fileName) {
		// 用文件路径新建一个文件对象, 路径可以是绝对路径也可以是相对路径
		// 传入的参数被当作为文件的抽象路径
		File file = new File(fileName);
		// 获取文件的名字, 不包括路径
		System.out.println("文件名:\t" + file.getName());
		// 将抽象路径名中的文件分隔符用系统默认分隔符替换
		System.out.println("文件路径:\t" + file.getPath());
		// 获取文件的绝对路径
		System.out.println("绝对路径:\t" + file.getAbsolutePath());
		// 获取抽象路径名的父抽象路径
		System.out.println("父目录:\t" + file.getParent());
		System.out.println("文件是否存在:\t" + file.exists());
		System.out.println("是否可读:\t" + file.canRead());
		System.out.println("是否可写:\t" + file.canWrite());
		System.out.println("是否是隐藏文件:\t" + file.isHidden());
		System.out.println("是否是普通文件:\t" + file.isFile());
		System.out.println("是否是文件目录:\t" + file.isDirectory());
		System.out.println("文件路径是否是绝对路径:\t" + file.isAbsolute());
		System.out.println("文件路径的URI:\t" + file.toURI());
		System.out.println("文件最后修改时间:\t" + new java.util.Date(file.lastModified()));
		System.out.println("文件大小:\t" + file.length() + " bytes");
	}

	/**
	 * 创建/删除文件[目录]的API
	 * 
	 * @throws IOException
	 */
	public static void createFile(String fileName, String directorName) throws IOException {
		// 创建一个目录
		File dir = new File(directorName);
		dir.mkdir();

		// 创建一个文件, 如果文件存在则不创建并返回false, 如果不存在, 则创建文件并返回true
		File file = new File(directorName + File.separator + fileName);
		if (file.exists()) { // 如果文件存在则删除, delete不可以删除非空的文件夹
			file.delete();
		}
		file.createNewFile();

		// 创建多级目录
		dir = new File(directorName + File.separator + "subFolder");
		dir.mkdirs();

		// renameTo()
		// 如果目标文件与源文件在同一路径下, 那么renameTo是重命名
		// 如果目标文件与源文件不再同一路径下, 那么renameTo就是剪切
		// 不可以操作目录
		File newFile = new File(fileName);
		file.renameTo(newFile);
	}

	/**
	 * 测试方法
	 * 
	 * @param args
	 *            命令行参数
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		String separator = File.separator;
		String fileName = "TestFile.java";
		String director = "src/io/api" + separator;

		getFileInfo(director + fileName);
	}
}
